/**
 * 路径处理工具类
 */
export class PathUtils {
    /**
     * 规范化路径
     * 
     * @param {string} p - 需要规范化的路径
     * @returns {string} - 规范化后的路径
     */
    static getNormalPath(p: string): string {
      // 如果路径为空或未定义，则直接返回
      if (p.length === 0 || !p || p === 'undefined') {
        return p;
      }
  
      // 替换路径中的连续斜杠为单个斜杠
      let res = p.replace(/\/\//g, '/');
  
      // 去除路径末尾的斜杠
      if (res[res.length - 1] === '/') {
        res = res.slice(0, res.length - 1);
      }
  
      return res;
    }
  
    /**
     * 检查路径是否为绝对路径
     * 
     * @param {string} path - 需要检查的路径
     * @returns {boolean} - 如果路径是绝对路径则返回true，否则返回false
     */
    static isAbsolutePath(path: string): boolean {
      return path.startsWith('/');
    }
  
    /**
     * 合并两个路径
     * 
     * @param {string} base - 基础路径
     * @param {string} relative - 相对路径
     * @returns {string} - 合并后的路径
     */
    static joinPaths(base: string, relative: string): string {
      const basePath = this.getNormalPath(base);
      const relativePath = this.getNormalPath(relative);
  
      // 如果relativePath已经是绝对路径，则直接返回
      if (this.isAbsolutePath(relativePath)) {
        return relativePath;
      }
  
      // 移除basePath末尾的斜杠（如果有）
      if (basePath.endsWith('/')) {
        return basePath.slice(0, -1) + '/' + relativePath;
      }
  
      return basePath + '/' + relativePath;
    }
  }